/**
 * 前端 日志打印 统一封装， 以uniapp为例子
 */
declare const uni:any; // 兼容uniapp防止ts报错
const config = {
    LOGS_ENABLE: true, // 是否开启日志
}

// 日志格式化
/**
 * 规格化日志输出--记录级别
 * @param args 日志参数列表(多参数)
 */
export const consoleLogWithDate = (...args:any[])=>{
    // @to-do: 获取日志是否开启配置
    if(!config.LOGS_ENABLE){
        return;
    }
    let logStr = args.reduce((pre:string,cur:any)=>pre+' '+JSON.stringify(cur), `[${new Date().toLocaleString()}]: `);
    console.log(logStr);
}

/**
 * 规格化日志输出--警告级别
 * @param args 日志参数列表(多参数)
 */
export const consoleWarnWithDate = (...args:any[])=>{
    // @to-do: 获取日志是否开启配置
    if(!config.LOGS_ENABLE){
        return;
    }
    let logStr = args.reduce((pre:string,cur:any)=>pre+' '+JSON.stringify(cur), `[${new Date().toLocaleString()}]: `);
    console.warn(logStr);
}

/**
 * 规格化日志输出--错误级别
 * @param args 日志参数列表(多参数)
 */
export const consoleErrorWithDate = (...args:any[])=>{
    // @to-do: 获取日志是否开启配置
    if(!config.LOGS_ENABLE){
        return;
    }
    let logStr = args.reduce((pre:string,cur:any)=>pre+' '+JSON.stringify(cur), `[${new Date().toLocaleString()}]: `);
    console.error(logStr);
}

/**
 * 将传入的参数序列化为字符串，并添加当前时间戳，然后保存到本地存储的'mobile-crm-log'键中。
 * @param args 任意数量的参数，将被序列化并拼接成日志字符串。
 */
export const setLocalStorageLog = (...args: any[]) => {
    let logStr = args.reduce((pre: string, cur: any) => pre + ' ' + JSON.stringify(cur), `[${new Date().toLocaleString()}]: `);
    // @to-do: 浏览器用localStorage，其他平台可能要修改
    localStorage.setItem('mobile-crm-log',logStr);
}

/**
 * 展示调试信息弹出框
 * @param {*} data 调试信息
 * @param {*} label 信息标题
 * @returns void
 */
export const debugModalInfo = (data:any,label='调试信息')=>{
    // @to-do 其他非平台uniapp平台替换为其他内容
    return uni.showModal({
        title: label,
        showCancel: false,
        content: label+': '+ JSON.stringify(data),
    })
}


/**
 * 异步加载并初始化 vconsole 工具。
 * 该函数用于在移动端浏览器中打开 vconsole，方便调试和查看日志。
 * vconsole 是一个轻量级的移动端调试工具。
 */
export const openConsoleV = () => {
    // 异步加载vconsole
    // #ifdef H5
    import('vconsole').then(content=>{
        new content.default();
    })
    // #endif
}


